package org.example.mapper;

import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.example.pojo.Order;
import org.example.pojo.StockInVo;

import java.time.LocalDate;
import java.time.LocalDateTime;

@Mapper
public interface OrderMapper {
    /**
     * 订单列表
     * @param orderNumber 订单编号
     * @return 订单列表
     */
    Page<Order> list(String orderNumber);

    /**
     * 添加订单
     * @param order 订单信息
     */
    void add(Order order);

    /**
     * 修改订单
     * @param order 订单信息
     */
    void update(Order order);

    /**
     * 删除订单
     * @param id 订单ID
     */
    @Delete("delete from orders where id = #{id}")
    void delete(Integer id);

    /**
     * 根据ID查询订单详情
     * @param id 订单ID
     * @return 订单详情
     */
    Order getById(Integer id);

    /**
     * 查询入库订单列表
     * @param orderNo
     * @param startTime
     * @param endTime
     * @return
     */
    Page<StockInVo> stockInList(String orderNo, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据订单ID查询订单信息
     * @param orderId
     * @return
     */
    @Select("select status from orders where id = #{orderId}")
    Integer getOrderById(Integer orderId);

    /**
     * 查询本月的入库数量
     */
    Integer countQuantityIn(LocalDateTime startOfMonth, LocalDateTime endOfMonth);

    /**
     * 查询本月的出库数量
     */
    Integer countQuantityOut(LocalDateTime startOfMonth, LocalDateTime endOfMonth);

    /**
     * 查询某天的入库数量
     */
    Integer countDayIn(LocalDate date);

    /**
     * 查询某天的出库数量
     */
    Integer countDayOut(LocalDate date);
}
